package tk.mynoteapp.dev.demo04.datasource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 连接池的配置不是一成不变的
 *   - 最重要的参数是最大连接数，它决定了连接池能使用的连接数量上限，达到上限后，新来的请求需要等待其他请求释放连接
 *   - 最大连接数不是设置得越大越好
 *     （如果设置得太大，不仅仅是客户端需要耗费过多的资源维护连接，更重要的是由于服务端对应的是多个客户端，每一个客户端都保持大量的连接，
 *     会给服务端带来更大的压力。这个压力又不仅仅是内存压力，可以想一下如果服务端的网络模型是一个 TCP 连接一个线程，那么几千个连接意味着
 *     几千个线程，如此多的线程会造成大量的线程切换开销）
 *   - 连接池最大连接数设置得太小，很可能会因为获取连接的等待时间太长，导致吞吐量低下，甚至超时无法获取连接
 *
 * 合理做法：
 *   - 对类似数据库连接池的重要资源进行持续检测，并设置一半的使用量作为报警阈值，出现预警后及时扩容
 *   - 修改配置参数务必验证是否生效，并且在监控系统中确认参数是否生效、是否合理
 */
@RestController
@RequestMapping("improperdatasourcepoolsize")
public class ImproperDataSourcePoolSIzeController {
    @Autowired
    private UserService userService;

    @GetMapping("test")
    public Object test() {
        return userService.register();
    }
}
